package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.List;

/**
 * @author yexi
 */
@Getter
@Setter
//对实体注释。任何Hibernate映射对象都要有这个注释
@Entity
//声明此对象映射到数据库的数据表，通过它可以为实体指定表(talbe),目录(Catalog)和schema的名字。该注释不是必须的，如果没有则系统使用默认值(实体的短类名)。
@Table(name = "tb_company")
public class Company {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Integer companyId;    //主键id
    private String name;   //公司名称

    //级联操作(cascade,不填时默认没有):
    //CascadeType.PERSIST：级联新增（又称级联保存）：order对象保存时(该类中也就是Company)也对items里的对象(该类中也就是User)也会保存。对应EntityManager的presist方法。
    //CascadeType.MERGE：级联合并（级联更新）：若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法。
    //CascadeType.REMOVE：级联删除：对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法。
    //CascadeType.REFRESH：级联刷新：获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据。
    //CascadeType.DETACH：级联脱管/游离操作。如果你要删除一个实体，但是它有外键无法删除，你就需要这个级联权限了。它会撤销所有相关的外键关联。
    //CascadeType.ALL：以上都是。
    @OneToMany(targetEntity = User.class, cascade = CascadeType.ALL)
    private List<User> staff;


}
